package com.zlsy.thread.lock.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author zhouliang
 * @date 2020/7/27 20:40
 */
public class MustLock {
    private static Lock lock = new ReentrantLock();

    /**
     * - void lock();
     * - lock()就是最普通的获取锁，如果锁已被其他的线程获取，则进行等待。
     * - lock不会像synchronized一样在异常的时候自动释放锁。
     * - 因此最佳实践是，在finally中释放锁，以保证发生异常时锁一定被释放。
     * - lock方法不能被中断，这会带来很大的隐患，一旦陷入死锁，lock就会陷入永久等待。
     *
     * @param args
     */
    public static void main(String[] args) {
        lock.lock();
        try {
            System.out.println(Thread.currentThread().getName() + "开始执行任务！");
        } finally {
            lock.unlock();
        }
    }
}
